//package com.atguigu.minio.service.impl;
//
//import com.atguigu.minio.config.MinioProperties;
//import com.atguigu.minio.service.FileService;
//import io.minio.MinioClient;
//import io.minio.PutObjectArgs;
//import io.minio.RemoveObjectArgs;
//import io.minio.errors.*;
//import jakarta.annotation.Resource;
//import org.joda.time.DateTime;
//import org.springframework.boot.context.properties.EnableConfigurationProperties;
//import org.springframework.stereotype.Service;
//import org.springframework.web.multipart.MultipartFile;
//
//import java.io.FileInputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.security.InvalidKeyException;
//import java.security.NoSuchAlgorithmException;
//import java.util.Arrays;
//import java.util.UUID;
////@EnableConfigurationProperties(value = MinioProperties.class)
//@Service
//public class FileServiceImpl implements FileService {
//    @Resource
//    MinioClient minioClient;
//
//    //硬编码
//    @Override
//    public String upload(MultipartFile file) {
//        try {
//            //1、获取文件信息： 文件校验 ， 文件名称
//            InputStream is = file.getInputStream();
//            if(is.available()==0){
//                throw new RuntimeException("上传文件错误");
//            }
//            String contentType = file.getContentType().toLowerCase();
//            //获取文件名称
//            String filename = file.getOriginalFilename();
//            //截取文件的扩展名
//            String suffix = filename.substring(filename.lastIndexOf(".")).toLowerCase();
//            if(!MinioProperties.MEDIA_TYPES
//                    .contains(suffix) //如果集合中包含文件的扩展名放行继续执行
//            ){
//                throw new RuntimeException("上传文件类型错误");
//            }
//            //2、拼接保存到桶内的文件路径和文件名称
//            String objectName = MinioProperties.MODULE + //本次上传的文件要保存到桶内的哪个子目录下
//                    new DateTime().toString("/yyyy/MM/dd/") + //时间日期路径
//                    System.currentTimeMillis()+"_"+ UUID.randomUUID().toString().substring(0,6)+ //唯一文件名称
//                    suffix;
//            minioClient.putObject(PutObjectArgs.builder()
//                    .bucket(MinioProperties.BUCKET)
//                    .stream(is , is.available(),-1)
//                    //要写入到桶内的文件路径&文件名称
//                    .object(objectName)
//                    //设置文件的contenttype：可以通过spring-web包提供的MediaType来获取文件类型
//                    .contentType(contentType) //给上传的文件设置mediaType
//                    .build());
//            //3、拼接上传成功的文件路径：
//            //http://192.168.123.111:9000/demo02/test/2024/08/27/1724722442151_4e8e17.png
//            String imgUrl = MinioProperties.ENDPOINT+"/"+MinioProperties.BUCKET+"/" +objectName;
//            return imgUrl;
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//
//    }
//
//    @Override
//    public String delete(String path) {
//        //http://192.168.123.111:9000/stgy/image/2024/08/27/1724726524070_d50925.jpg
//        try {
//            int beginIndex = (MinioProperties.ENDPOINT+"/"+MinioProperties.BUCKET+"/").length();
//            String objectName = path.substring(beginIndex);
//            minioClient.removeObject(RemoveObjectArgs.builder()
//                    .bucket(MinioProperties.BUCKET)
//                    .object(objectName).build());
//            return "success";
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//    }
//}
